总是选择难的那条路
2018年10月16日,宋牧春童鞋merge了人生的第一个patch:
2021年6月,宋牧春童鞋每月都在贡献有实质性价值的patch:
最近的vmemmap针对大页省内存的patch,他发了23版才合入,详见文章:
就这个事情本身,笔者在“关于Linux学习和工程的方法学”的微信群里面,也有过在下的评论:
在下的观点是,我们作为一个个体,永远是有选择的空间的。在发100个cleanup的patch进入高排名有好的KPI,和坐冷板凳把1个有价值的patch发23版直到合入之间,我们总是可以选的,我们总是可以选难的那条路的。
选择难的那条路,会有自身的彷徨,会有他人的质疑,但是总有一天可以凤凰涅槃,拨云见日。选择重复、自我放逐、做简单的事情,刷单一时爽,但是长久下去,也是误终身啊。
基于同样的道理,我们决定了写一本前人从未写过的书“关于Linux性能优化的书”,我们没有任何可以借鉴和“抄袭的”’。我们选择了不重复写内核、写驱动,以及写任何有可以模仿的大纲的内容。
《Linux——性能优化篇》目录
性能优化的计算机体系结构原理
第一章 必须理解的计算机体系结构知识
1.1 现代计算机系统是怎么工作的
1.2 SMP和超线程
1.3 cache、内存、总线、DMA和I/O
1.4 cache一致性协议与False Sharing
1.5 处理器微架构及IPC与CPI
1.6 MMU与IOMMU技术
1.7 设备用户态透传技术
1.8 NUMA
第二章 硬件对性能优化的底层支撑
2.1 硬件支持的trace能力
2.2 硬件支持的profiling能力
2.3 不可屏蔽中断
2.4 原子操作相关的优化
2.5 页表、TLB管理相关的优化
2.6 I/O相关的优化
性能优化的操作系统原理
第三章 Linux进程调度与调度优化
3.1 Linux进程调度的主要目标
3.2 实时进程的调度
3.3 普通进程的调度
3.3 多核与负载均衡
3.4 NUMA系统下的调度
3.5 CPU隔离
3.6 NUMA与进程调度
3.7 调度器相关的参数与配置
第四章 Linux内核管理与调优参数
4.1 物理内存管理,page和buddy
4.2 slab以及用户态库malloc的二级管理
4.3 kmalloc和vmalloc
4.4 进程的内存映射
4.5 page cache和inode, dentry cache
4.6 匿名页与swap
4.7 NUMA与内存管理
4.8 内存回收的参数与配置
4.9 脏页写回的参数与配置
第五章 Linux I/O与调优
5.1 文件读写与内存管理的关系
5.2 文件读写I/O的全流程
5.3 BIO与块层处理机制
5.4 阻塞、非阻塞、多路复用、异步I/O与io_uring
5.5 各种存储介质与差异
5.6 常见的文件系统与工作原理
5.7 NVDIMM与DAX
5.8 块层相关的参数与配置
5.9 文件系统相关的参数与配置
第六章 Linux 网络与调优
6.1 Linux网络概述
6.2网络优化的基本宗旨
6.3 影响Linux网络性能的因素
6.4 Linux TCP单机性能优化
6.5 Linux TCP拥塞控制优化
6.6 Linux UDP单机性能优化
6.7 DPDK/XDP/SmartNIC概述
6.8 Linux作为转发路径的性能优化
6.9 增加带宽/缩短路径(前移至子章节)
性能优化的方法学和工具
第七章 性能优化的方法学
6.1 过早的优化是万恶之源
6.2 找到真正的瓶颈
6.3 USE模型
6.4 top-down分析方法
第八章 编写高性能的程序
7.1 阿姆达尔定律
7.2 C10K以及衍生问题
7.3 意识到cache的编程
7.4 多线程、I/O模型的设计
7.5 减少程序的资源消耗
7.6 让程序能充分利用硬件的拓扑
第九章 常用性能分析工具
8.1 常用的Linux性能工具(top,iotop,vmstat,iostat等)
8.2 ftrace、tracepoints、kprobe、uprobe
8.3 perf
8.4 trace-cmd
8.5 eBPF/BCC
8.6 火焰图
8.7 kernelshark
第九章 典型性能瓶颈分析
9.1 当热点在CPU
9.2 当瓶颈是因为内存不足
9.3 当瓶颈是因为I/O延迟
9.4 当瓶颈是因为网络
9.5 当瓶颈是因为内核驱动
10几年前在下写下《Linux设备驱动开发详解》,后面选择了不断迭代这同一本书,1版,2版,3版。今天我们选择写一本实质性提高工程水平的书,比10几年前对自身提出了更加高的要求。
已邀请3位一线专家加我自己,一起来干这件事情。我们的原则是每个字必须自己亲自打,谈自己的真实体会、感想和心得,到了这个年龄干这事情绝对目的要纯洁。用我们的内卷,换更多人的不内卷。